/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package suministros.ejb30.entity;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author Renato
 */
@Entity
@Table(name = "Orden")
@NamedQueries({
    @NamedQuery(name = "Orden.findAll", query = "SELECT o FROM Orden o"),
    @NamedQuery(name = "Orden.findByNroOrden", query = "SELECT o FROM Orden o WHERE o.nroOrden = :nroOrden"),
    @NamedQuery(name = "Orden.findByFechapropuesta", query = "SELECT o FROM Orden o WHERE o.fechapropuesta = :fechapropuesta"),
    @NamedQuery(name = "Orden.findByFechaemision", query = "SELECT o FROM Orden o WHERE o.fechaemision = :fechaemision"),
    @NamedQuery(name = "Orden.findByValorTotal", query = "SELECT o FROM Orden o WHERE o.valorTotal = :valorTotal"),
    @NamedQuery(name = "Orden.findByValorImpuesto", query = "SELECT o FROM Orden o WHERE o.valorImpuesto = :valorImpuesto"),
    @NamedQuery(name = "Orden.findByIdZona", query = "SELECT o FROM Orden o WHERE o.idZona = :idZona"),
    @NamedQuery(name = "Orden.findByIdAlmacen", query = "SELECT o FROM Orden o WHERE o.idAlmacen = :idAlmacen"),
    @NamedQuery(name = "Orden.findByCambioMoneda", query = "SELECT o FROM Orden o WHERE o.cambioMoneda = :cambioMoneda"),
    @NamedQuery(name = "Orden.findByReferencia", query = "SELECT o FROM Orden o WHERE o.referencia = :referencia"),
    @NamedQuery(name = "Orden.findByObservacion", query = "SELECT o FROM Orden o WHERE o.observacion = :observacion"),
    @NamedQuery(name = "Orden.findByAno", query = "SELECT o FROM Orden o WHERE o.ano = :ano"),
    @NamedQuery(name = "Orden.findByMes", query = "SELECT o FROM Orden o WHERE o.mes = :mes"),
    @NamedQuery(name = "Orden.findByCompromiso", query = "SELECT o FROM Orden o WHERE o.compromiso = :compromiso")})
public class Orden implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "nro_orden", nullable = false, length = 15)
    private String nroOrden;
    @Column(name = "Fecha_propuesta")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechapropuesta;
    @Column(name = "Fecha_emision")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaemision;
    @Column(name = "valor_total", precision = 14, scale = 2)
    private BigDecimal valorTotal;
    @Basic(optional = false)
    @Column(name = "valor_impuesto", nullable = false, precision = 14, scale = 2)
    private BigDecimal valorImpuesto;
    @Column(name = "id_zona", length = 2)
    private String idZona;
    @Column(name = "id_almacen", length = 2)
    private String idAlmacen;
    @Column(name = "cambio_moneda", precision = 14, scale = 2)
    private BigDecimal cambioMoneda;
    @Column(name = "referencia", length = 200)
    private String referencia;
    @Column(name = "Observacion", length = 1000)
    private String observacion;
    @Column(name = "ano", length = 4)
    private String ano;
    @Column(name = "mes", length = 2)
    private String mes;
    @Column(name = "compromiso", length = 6)
    private String compromiso;
    @JoinColumn(name = "id_comprobante", referencedColumnName = "id_comprobante")
    @ManyToOne
    private ComprobantePago idComprobante;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "orden1")
    private Orden orden;
    @JoinColumn(name = "nro_orden", referencedColumnName = "nro_orden", nullable = false, insertable = false, updatable = false)
    @OneToOne(optional = false)
    private Orden orden1;
    @JoinColumn(name = "cod_proveedor", referencedColumnName = "cod_proveedor")
    @ManyToOne
    private Proveedor codProveedor;
    @JoinColumn(name = "id_ubicacion", referencedColumnName = "id_SubAlmacen")
    @ManyToOne
    private SubAlmacen idUbicacion;
    @JoinColumn(name = "comprobante_pago", referencedColumnName = "id_tabla_tipo")
    @ManyToOne
    private Tipo comprobantePago;
    @JoinColumn(name = "estado_atencion", referencedColumnName = "id_tabla_tipo")
    @ManyToOne
    private Tipo estadoAtencion;
    @JoinColumn(name = "forma_pago", referencedColumnName = "id_tabla_tipo")
    @ManyToOne
    private Tipo formaPago;
    @JoinColumn(name = "plantilla_impuesto", referencedColumnName = "id_tabla_tipo")
    @ManyToOne
    private Tipo plantillaImpuesto;
    @JoinColumn(name = "tipo_moneda", referencedColumnName = "id_tabla_tipo")
    @ManyToOne
    private Tipo tipoMoneda;
    @JoinColumn(name = "Tipo_orden", referencedColumnName = "id_tabla_tipo")
    @ManyToOne
    private Tipo tipoorden;
    @OneToMany(mappedBy = "nroOrden")
    private List<Movimiento> movimientoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "orden")
    private List<DetalleOrden> detalleOrdenList;
    @Column(name = "monto_literal")
    private String monto_literal;

    @Column(name = "nro_solicitud_cotizacion")
    private String nro_solicitud_cotizacion;

     @Column(name = "codProceso")
    private String id_licitacion;
     @Column(name = "usuario")
    private String usuario;
    @Column(name = "mac")
    private String mac;
   @JoinColumn(name = "id_empresa", referencedColumnName = "id_empresa")
    @ManyToOne(optional = false)
    private Empresa empresa;
   @Column(name = "id_proyecto")
    private String idproyecto;

   @Column(name = "fecha_operacion")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaOperacion;

   @Column(name = "monto_utilizado", precision = 14, scale = 2)
    private BigDecimal monto_utilizado;



    public Orden() {
    }

    public BigDecimal getMonto_utilizado() {
        if(monto_utilizado==null)
            monto_utilizado=BigDecimal.ZERO;
        return monto_utilizado;
    }

    public void setMonto_utilizado(BigDecimal monto_utilizado) {
        this.monto_utilizado = monto_utilizado;
    }

    
    public Date getFechaOperacion() {
        return fechaOperacion;
    }

    public void setFechaOperacion(Date fechaOperacion) {
        this.fechaOperacion = fechaOperacion;
    }

    
    public String getIdproyecto() {
        return idproyecto;
    }

    public void setIdproyecto(String idproyecto) {
        this.idproyecto = idproyecto;
    }

    public Orden(String nroOrden) {
        this.nroOrden = nroOrden;
    }

    public Orden(String nroOrden, BigDecimal valorImpuesto) {
        this.nroOrden = nroOrden;
        this.valorImpuesto = valorImpuesto;
    }

    public Empresa getEmpresa() {
        return empresa;
    }

    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }

    public String getMac() {
        return mac;
    }

    public void setMac(String mac) {
        this.mac = mac;
    }

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

     public String getId_licitacion() {
        return id_licitacion;
    }

    public void setId_licitacion(String id_licitacion) {
        this.id_licitacion = id_licitacion;
    }
    public String getNro_solicitud_cotizacion() {
        return nro_solicitud_cotizacion;
    }

    public void setNro_solicitud_cotizacion(String nro_solicitud_cotizacion) {
        this.nro_solicitud_cotizacion = nro_solicitud_cotizacion;
    }

    public String getMonto_literal() {
        return monto_literal;
    }

    public void setMonto_literal(String monto_literal) {
        this.monto_literal = monto_literal;
    }

    public String getNroOrden() {
        return nroOrden;
    }

    public void setNroOrden(String nroOrden) {
        this.nroOrden = nroOrden;
    }

    public Date getFechapropuesta() {
        return fechapropuesta;
    }

    public void setFechapropuesta(Date fechapropuesta) {
        this.fechapropuesta = fechapropuesta;
    }

    public Date getFechaemision() {
        return fechaemision;
    }

    public void setFechaemision(Date fechaemision) {
        this.fechaemision = fechaemision;
    }

    public BigDecimal getValorTotal() {
        return valorTotal;
    }

    public void setValorTotal(BigDecimal valorTotal) {
        this.valorTotal = valorTotal;
    }

    public BigDecimal getValorImpuesto() {
        return valorImpuesto;
    }

    public void setValorImpuesto(BigDecimal valorImpuesto) {
        this.valorImpuesto = valorImpuesto;
    }

    public String getIdZona() {
        return idZona;
    }

    public void setIdZona(String idZona) {
        this.idZona = idZona;
    }

    public String getIdAlmacen() {
        return idAlmacen;
    }

    public void setIdAlmacen(String idAlmacen) {
        this.idAlmacen = idAlmacen;
    }

    public BigDecimal getCambioMoneda() {
        return cambioMoneda;
    }

    public void setCambioMoneda(BigDecimal cambioMoneda) {
        this.cambioMoneda = cambioMoneda;
    }

    public String getReferencia() {
        return referencia;
    }

    public void setReferencia(String referencia) {
        this.referencia = referencia;
    }

    public String getObservacion() {
        return observacion;
    }

    public void setObservacion(String observacion) {
        this.observacion = observacion;
    }

    public String getAno() {
        return ano;
    }

    public void setAno(String ano) {
        this.ano = ano;
    }

    public String getMes() {
        return mes;
    }

    public void setMes(String mes) {
        this.mes = mes;
    }

    public String getCompromiso() {
        return compromiso;
    }

    public void setCompromiso(String compromiso) {
        this.compromiso = compromiso;
    }

    public ComprobantePago getIdComprobante() {
        return idComprobante;
    }

    public void setIdComprobante(ComprobantePago idComprobante) {
        this.idComprobante = idComprobante;
    }

    public Orden getOrden() {
        return orden;
    }

    public void setOrden(Orden orden) {
        this.orden = orden;
    }

    public Orden getOrden1() {
        return orden1;
    }

    public void setOrden1(Orden orden1) {
        this.orden1 = orden1;
    }

    public Proveedor getCodProveedor() {
        return codProveedor;
    }

    public void setCodProveedor(Proveedor codProveedor) {
        this.codProveedor = codProveedor;
    }

    public SubAlmacen getIdUbicacion() {
        return idUbicacion;
    }

    public void setIdUbicacion(SubAlmacen idUbicacion) {
        this.idUbicacion = idUbicacion;
    }

    public Tipo getComprobantePago() {
        return comprobantePago;
    }

    public void setComprobantePago(Tipo comprobantePago) {
        this.comprobantePago = comprobantePago;
    }

    public Tipo getEstadoAtencion() {
        return estadoAtencion;
    }

    public void setEstadoAtencion(Tipo estadoAtencion) {
        this.estadoAtencion = estadoAtencion;
    }

    public Tipo getFormaPago() {
        return formaPago;
    }

    public void setFormaPago(Tipo formaPago) {
        this.formaPago = formaPago;
    }

    public Tipo getPlantillaImpuesto() {
        return plantillaImpuesto;
    }

    public void setPlantillaImpuesto(Tipo plantillaImpuesto) {
        this.plantillaImpuesto = plantillaImpuesto;
    }

    public Tipo getTipoMoneda() {
        return tipoMoneda;
    }

    public void setTipoMoneda(Tipo tipoMoneda) {
        this.tipoMoneda = tipoMoneda;
    }

    public Tipo getTipoorden() {
        return tipoorden;
    }

    public void setTipoorden(Tipo tipoorden) {
        this.tipoorden = tipoorden;
    }

    public List<Movimiento> getMovimientoList() {
        return movimientoList;
    }

    public void setMovimientoList(List<Movimiento> movimientoList) {
        this.movimientoList = movimientoList;
    }

    public List<DetalleOrden> getDetalleOrdenList() {
        return detalleOrdenList;
    }

    public void setDetalleOrdenList(List<DetalleOrden> detalleOrdenList) {
        this.detalleOrdenList = detalleOrdenList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (nroOrden != null ? nroOrden.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {

        if (!(object instanceof Orden)) {
            return false;
        }
        Orden other = (Orden) object;
        if ((this.nroOrden == null && other.nroOrden != null) || (this.nroOrden != null && !this.nroOrden.equals(other.nroOrden))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "suministros.ejb30.entity.Orden[nroOrden=" + nroOrden + "]";
    }

}
